package com.lyn.spplus;

import android.content.Context;
import android.content.SharedPreferences;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * SharedPreferences 工厂
 *
 * @author Lyn 2022/12/18
 * @version 1.0.0
 */
public class SpFactory {

    public static Map<String, Sp> spInterfaceMap = new ConcurrentHashMap<>();

    /**
     * 注册SharedPreferences 工厂
     *
     * @param context 上下文
     */
    public static void registerDefault(Context context, Class<?> defaultValueClass) {
        spInterfaceMap.put(SpImp.DEFAULT_SP_NAME, new SpImp(context, defaultValueClass));
    }

    /**
     * 注册SharedPreferences 工厂
     *
     * @param context 上下文
     * @param name    名称
     */
    public static void register(Context context, String name, Class<?> defaultValueClass) {
        spInterfaceMap.put(name, new SpImp(context, name, defaultValueClass));
    }


    /**
     * 注册SharedPreferences 工厂
     *
     * @param sp   SharedPreferences 可以用mmkv 因为mmkv也实现了SharedPreferences接口
     * @param name 名称
     */
    public static void register(SharedPreferences sp, String name, Class<?> defaultValueClass) {
        spInterfaceMap.put(name, new SpImp(sp, name, defaultValueClass));
    }


    /**
     * 注销SharedPreferences 工厂
     *
     * @param name 名称
     */
    public static void unRegister(String name) {
        spInterfaceMap.remove(name);
    }

    /**
     * 获取sp
     *
     * @return Sp实例
     */
    public static Sp getDefaultSp() {
        return spInterfaceMap.get(SpImp.DEFAULT_SP_NAME);
    }

    /**
     * 获取sp
     *
     * @param name sp 名称
     * @return Sp实例
     */
    public static Sp getSp(String name) {
        return spInterfaceMap.get(name);
    }
}
